// 引入pinia的 defineStore 函数 创建store
import { defineStore } from 'pinia'
// 引入api请求函数
import centerApi from '@/api/center'
// 引入参数类型
import type { logonData } from '@/api/center'

export const centerStore = defineStore({
  id:'CenterStore',
  state(){
    return {
      // token:'', 如果你只是为了登录，那么就直接初始化为空串
      // 如果你为了后期能够自动登录（免登录），此时就要把token保存在本地
      // 初始化的时候要先从本地去拿,如果能拿到就拿，拿不到就是个'' 空串
      token:localStorage.getItem('token_key') || '',
      // 用户名称
      userName:'',
      // 用户信息
      userInfo:{
        birthday:null,
        createTime:'',
        email:null,
        gender:'',
        headImg:'',
        id:0,
        nickName:'',
        openId:null,
        operateTime:'',
        passwd:'',
        phoneNum:'',
        status:0,
        userLevel:''
      }
    }
  },
  actions:{
    // 先写登录的逻辑
    async login(lohinData:logonData){
      try {
        // 携带参数 发送请求
        const res = await centerApi.userLogin(lohinData)
        // 把获取到的数据赋值给state的token
        this.token = res.data.token
        // 把获取到的token存到本地
        localStorage.setItem('token_key',res.data.token)
        // 把用户信息保存到store
        this.userName = res.data.nickName
        // 组件当中发请求如何知道请求是成功还是失败，进而决定不同的逻辑
        return 'ok'
      } catch (error) {
        // 请求失败，继续传递失败的Promise
        return Promise.reject(error)
      }
    },

    // 获取用户信息逻辑
    async getUserInfo(){
      try {
        // 调用获取用户信息 API
        const result = await centerApi.getUserInfo()
        // 把获取到的数据赋值给state的userInfo
        this.userInfo = result.data
        return 'ok'
      } catch (error) {
        // 请求失败，继续传递失败的Promise
        return Promise.reject(error)
      }
    },

    // 重置用户信息和token逻辑
    async reset(){
      // 清空用户信息
      this.token = ''
      this.userName = ''
      this.userInfo = {
        birthday:null,
        createTime:'',
        email:null,
        gender:'',
        headImg:'',
        id:0,
        nickName:'',
        openId:null,
        operateTime:'',
        passwd:'',
        phoneNum:'',
        status:0,
        userLevel:''
      }
      // 清除用户的token
      localStorage.removeItem('token_key')
    },

    // 退出登录逻辑
    async logout(){
      try {
        // 调用退出登录 API
        await centerApi.userLogout()
        // 清空用户信息和token
        this.reset()
        return 'ok'
      } catch (error) {
        // 请求失败，继续传递失败的Promise
        return Promise.reject(error)
      }
    }
  },
  getters:{}
})
